package com.ftg.learn.chapter02.mybatis;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

/**
 * 第一个案例 -
 * mybatis :
 * 第一个 ： 引入mybatis的jar包
 * 1.1 maven 依赖引入
 * 1.1.1 pom.xml里写一个依赖
 * 第二个 :  为框架提供核心参数  （配置文件提供的）
 * 2.1 有几个配置文件
 * 2.1.1 框架总配置文件
 * 2.1.1.1 mybatis-config.xml
 * 2.1.1.2 用户名 密码 ip 端口号  数据库实例 相关信息
 * 2.1.2 框架的映射文件 ,写的是客户端里面的大量sql语句
 * 2.1.2.1 select|insert|update|delete
 * 2.2 写在哪里呢?
 * 2.2.1 写在resources
 * 第三个 ： 调用方法
 * @author kangjx
 * @version 1.0
 * @date 2023/12/19 上午10:41
 */
public class FirstDemo {

    public static void main(String[] args) {
//        add();
//        query();
        queryForParamter("刘","admin123");
        
        //初级
        //k xe 
    }

    /**
     *
     * @param username
     */
    public static void queryForParamter(String username,String passwrod){
        String resource = "config/mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            SqlSession session = sqlSessionFactory.openSession(true);

//            一种
            Map<String,Object> map = new HashMap<>(2);
            map.put("username","刘");
            map.put("password","admin123");
//            List<Map<String,Object>> list = session.selectList("user.withParamter",user);
//            list.forEach(System.out::println);

            //第二种
            User user = new User();
            user.setUsername(username);
            user.setPassword(passwrod);
            List<User> list1 = session.selectList("user.withParamter",user);
            list1.forEach(x->{
                System.out.println("用户名" + x.getUsername());
            });

//第一个任务  查询 带多个参数的  一个参数
//第二个任务   返回map javabean
//第三个  处理一下 stream (lambda)

            session.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static void add(){
        //总配置文件地址
        String resource = "config/mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            SqlSession session = sqlSessionFactory.openSession(true);

            Map<String,Object> map = new HashMap<>(2);
            map.put("username","刘心怡");
            map.put("password","admin123");

            int num = session.insert("user.insertUser",map);
            System.out.println(num);
            session.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 查询
     */
    public static void query(){
        String resource = "config/mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            SqlSession session = sqlSessionFactory.openSession();

            List<Map<String,Object>> objects = session.selectList("user.selectAll");

            //stream jdk1.8全新特性

            objects.stream()
                    .filter(x->x.get("username").toString().startsWith("刘")&&x.get("username").toString().length()==2).count();
//                    .forEach(System.out::println);

//            for (Map<String, Object> object : objects) {
//                if(object.get("username").toString().startsWith("刘")){
//                    System.out.println(object);
//                }
//            }
//
////            长度 objects.size()，objects里面有多少个数据
//
//            //循环方式  : lambda 表达式
//            for (int i = 0; i < objects.size(); i++) {
//                System.out.println(objects.get(i));
//            }
//
//
////            for(泛型 变量 :集合|数组|迭代器){
////
////            }
//
////            System.out.println("map增强");
////            for(Map<String,Object> m : objects){
////                System.out.println(m);
////            }
//
//            Consumer t1 = new Consumer() {
//                @Override
//                public void accept(Object o) {
//                    System.out.println(o);
//                }
//            };
//
//            //lambda
//            Consumer t2 = o -> {
//                System.out.println(o);
//            };
//
//            Consumer t3 = o-> System.out.println(o);
//
//            Consumer<Map<String,Object>> t4 = o-> System.out.println(o);
//
//
//            //函数调用
//            Consumer<Map<String,Object>> t5 = System.out::println;
//
//            System.out.println("foreach--lambda");
//            objects.forEach(t5);
//            //把一个接口做为参数传递一个方法   是接口的实现类 ()->{} lambda
//            objects.forEach(System.out::println);

//            int[] a = new int[4];
//            for(int i = 0;i < a.length;i++){
//                System.out.println(a[i]);
//            }
            //exp1 初始値 开始 i= 1;i = 2; int i=1,j=3,x=7;
            //exp2 结束条件 boolean true| false  i <2 2+3 < 10
            //exp4 代码块 循环
            //exp3 步长  [加步长 减步长]
//            for(exp1;exp2;exp3){
//                exp4;
//            }

//            for(int i = 1,x=0;i<10;i+=x,x++){
//                System.out.println(i);
//            }

//            for(int i = 0 ;i < 10;i++){
//                System.out.println(i);
//            }




            session.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}
